iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0
Software Development

30天收斂後端開發心法系列 第 14

30天收斂後端開發心法 - (14) Laravel Validation

  • 分享至 

  • xImage
  •  

Laravel 的驗證系統讓我們可以輕鬆地限制與過濾輸入參數的格式,若驗證不通過,系統會自動回傳 422 Unprocessable Content 錯誤,省去了許多額外的設定與處理。

直接在 Controller 內驗證

你可以在 Controller 中,透過 $request->validate() 直接進行參數驗證:

$validated = $request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

這樣一來,當驗證失敗時 Laravel 會自動拋出錯誤並回應對應的錯誤訊息。

使用 FormRequest 進行驗證(推薦方式)

更進一步,我們可以透過繼承 FormRequest 類別的方式,將驗證邏輯與 Controller 分離。

建立 Request 類別

php artisan make:request StorePostRequest
建立後,會在 App\Http\Requests 目錄下產生 StorePostRequest.php,接著可以在 rules() 方法中定義驗證邏輯:

public function rules(): array
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

在 Controller 中使用時,只需將 StorePostRequest 注入方法參數:

public function store(StorePostRequest $request)
{
    $validated = $request->validated();

    // 處理驗證通過後的邏輯...
}

使用 after() 方法進行進階驗證

如果需要根據複雜邏輯(例如與資料庫比對)進行額外驗證,可以覆寫 after() 方法:

use Illuminate\Contracts\Validation\Validator;

public function after(): array
{
    return [
        function (Validator $validator) {
            // 假設要驗證 posts 表中沒有包含 title 字串的資料
            if (!DB::table('posts')->where('title', 'like', '%' . $this->title . '%')->exists()) {
                $validator->errors()->add('title', '找不到相關的標題內容');
            }
        }
    ];
}

記得引入 DB:

use Illuminate\Support\Facades\DB;

客製化錯誤訊息

你也可以透過覆寫 messages() 方法,來設定自訂錯誤訊息:

public function messages(): array
{
    return [
        'title.required' => '標題為必填項目',
        'title.unique' => '標題已經被使用',
        'title.max' => '標題長度不能超過 255 字元',
        'body.required' => '內容為必填項目',
    ];
}

小結

Laravel 提供了彈性且強大的驗證系統,常見的驗證方式有:

在 Controller 中使用 $request->validate()
建立 FormRequest 類別,集中驗證邏輯
使用 after() 進行複雜邏輯的驗證
客製化錯誤訊息,提供更友善的提示
建議在開發中多使用 FormRequest,可以讓 Controller 更乾淨,驗證邏輯更集中易維護。

如需更多驗證規則,可參考官方文件:
Laravel Validation 官方文件


上一篇
30天收斂後端開發心法 - (13) Laravel 產 PDF
下一篇
30天收斂後端開發心法 - (15) File Storage
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言